home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 April / EnigmA AMIGA RUN 17 (1997)(G.R. Edizioni)(IT)[!][issue 1997-04][EAR-CD].iso / EARCD / util / pack / xpk_Source.lha / xpk_Source / shell / xQuery.c < prev    next >
C/C++ Source or Header  |  1996-12-06  |  3KB  |  102 lines

  1. #define NAME     "xQuery"
  2. #define REVISION "3"
  3.  
  4. /* Programmheader
  5.  
  6.     Name:        xQuery
  7.     Author:        SDI (before 1.2 Urban Dominik Müller)
  8.     Distribution:    PD
  9.     Description:    Query packer properties
  10.     Compileropts:    -
  11.     Linkeropts:    -l xpkmaster
  12.  
  13.  1.3   29.11.96 : fixed for new includes and Maxon C++
  14. */
  15.  
  16. #include "SDI_defines.h"
  17. #define SDI_TO_ANSI
  18. #include "SDI_ASM_STD_protos.h"
  19. #include <pragma/exec_lib.h>
  20. #include <pragma/dos_lib.h>
  21. #include <pragma/xpkmaster_lib.h>
  22.  
  23. #ifdef __MAXON__
  24.   #define __asm
  25. #endif
  26.  
  27. struct Library *XpkBase = 0;
  28.  
  29. UBYTE errbuf[XPKERRMSGSIZE];
  30. UBYTE line1[200], line2[200], line3[200], line4[200];
  31. UBYTE line5[200], line6[200], line7[200];
  32.  
  33. void end(const STRPTR text)
  34. {
  35.   if(text)    printf(text);
  36.   if(XpkBase)    CloseLibrary (XpkBase);
  37.   exit(text ? 10 : 0);
  38. }
  39.  
  40. void packerquery(STRPTR packer)
  41. {
  42.   struct XpkPackerInfo xpinfo;
  43.   struct XpkMode xminfo;
  44.   LONG mode, res;
  45.   UBYTE name[5];
  46.  
  47.   printf("\23332mPacker :\233m %s\n", packer);
  48.  
  49.   if(res = XpkQueryTags(XPK_PackerQuery, &xpinfo,
  50.             XPK_PackMethod, packer,
  51.             TAG_DONE))
  52.     return;
  53.  
  54.   printf("\23332mName   :\233m %s\n", xpinfo.xpi_LongName);
  55.   printf("\23332mDescr. :\233m %s\n", xpinfo.xpi_Description);
  56.   printf("\23332mDefMode:\233m %d\t", xpinfo.xpi_DefMode);
  57.   printf("\23332mDefChunk:\233m %ld Kb\t", xpinfo.xpi_DefChunk >> 10);
  58.   printf("\23332mMaxChunk:\233m %ld Kb\n", xpinfo.xpi_MaxChunk >> 10);
  59.  
  60.   printf("                      Pack  Unpack  Pack Unpack\n");
  61.   printf("Name   Mode  Ratio   Speed   Speed   Mem    Mem Description\n");
  62.   /*       FAST 99..100 99.7% 1024K/s 1040K/s 1024K  1024K Gnubbeldubbel */
  63.  
  64.   CopyMem(packer, name, 4); name[4] = 0;
  65.  
  66.   for(mode = 0; mode < 100 && !CTRL_C; mode = xminfo.xm_Upto + 1)
  67.   {
  68.     if(XpkQueryTags(XPK_ModeQuery, &xminfo,
  69.             XPK_PackMethod, packer,
  70.             XPK_PackMode, mode,
  71.             TAG_DONE))
  72.       break;
  73.     printf("%4.4s %2ld..%-3ld %2ld.%1ld%% %4ldK/s %4ldK/s %4ldK  %4ldK %s\n",
  74.       name, mode, xminfo.xm_Upto, xminfo.xm_Ratio / 10, xminfo.xm_Ratio % 10,
  75.         xminfo.xm_PackSpeed, xminfo.xm_UnpackSpeed,
  76.         xminfo.xm_PackMemory >> 10, xminfo.xm_UnpackMemory >> 10,
  77.         xminfo.xm_Description);
  78.   }
  79.   printf("\n");
  80. }
  81.  
  82. void main(int argc, char **argv)
  83. {
  84.   struct XpkPackerList list;
  85.   LONG i;
  86.  
  87.   if(!(XpkBase = OpenLibrary(XPKNAME, 0)))
  88.     end("Cannot open " XPKNAME "\n");
  89.  
  90.   if(XpkQueryTags(XPK_PackersQuery, &list, TAG_DONE))
  91.     end("Cannot get information");
  92.  
  93.   if(argc == 1)
  94.     for(i = 0; i < list.xpl_NumPackers && !CTRL_C; i++)
  95.       packerquery(list.xpl_Packer[i]);
  96.   else
  97.     for(i = 1; i < argc; i++)
  98.       packerquery(argv[i]);
  99.   
  100.   end(CTRL_C ? "***Break\n" : NULL);
  101. }
  102.